package job.meituan;
import java.util.*;

/**
 * Author: Zhang Dongwei
 * Date: 2023/8/12 15:06
 * 小美有一个矩形的蛋糕，共分成了n行m 列，共n*m个区域，每个区域是一个小正方形，已知蛋糕每个区域都有一个美味度。她想切一刀把蛋糕切成两部分，自己吃一部分，小团吃另一部分。
 * 小美希望两个人吃的部分的美味度之和尽可能接近，请你输出|s1-s2|的最小值。（其中s1代表小美吃的美味度，s2代表小团吃的美味度）。
 * 请务必保证，切下来的区域都是完整的，即不能把某个小正方形切成两个小区域。
 * 输入描述
 * 第一行输出两个正整数n和m，代表蛋糕区域的行数和列数。接下来的n行，每行输入m个正整数aij，用来表示每个区域的美味度。
 * 输出描述
 *
 * 一个整数，代表|s1-s2|的最小值。
 *
 * 示例1
 *
 * 输入
 *
 * 2 3
 * 1 1 4
 * 5 1 4
 * 输出
 *
 * 0
 */
public class mt3 {

    static int[][] matrix;
    static int[][] pre;

    static int get(int x1,int y1, int x2, int y2) {
        return pre[x2 + 1][y2 + 1] - pre[x1][y2 + 1] - pre[x2 + 1][y1] + pre[x1][y1];
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        matrix = new int[n][m];
        pre = new int[ n + 1][m + 1];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + matrix[i - 1][j - 1];
            }
        }
//        for (int i = 0; i <= n; i++){
//            System.out.println(Arrays.toString(pre[i]));
//        }
        int res = Integer.MAX_VALUE;
        for (int j = 0 ; j < m; j++) {
            // 0,0  n-1,j    0,j  n-1,m-1
            res = Math.min(res, Math.abs(get(0,0,n-1,j) - get(0,j,n-1,m-1)));
        }
        System.out.println(res);
    }
}
